package cn.quevo.cube.provide.data.validate.impl;

import cn.quevo.common.lang.NumberUtils;
import cn.quevo.cube.provide.data.entity.dto.ColumnValidateDto;
import cn.quevo.cube.provide.data.validate.AbstractColumnDataValidate;
import cn.quevo.cube.provide.data.validate.ColumnDataValidate;
import cn.quevo.cube.provide.exception.DataCheckException;
import cn.quevo.cube.provide.exception.response.ColumnExceptionResponse;

/**
 * 数字类型验证
 *
 * @author July july_sky@foxmail.com
 * @version 1.0
 * @date 2018/12/14 6:00 PM
 * @Copyright 湘豫（北京）科技有限公司版权所有.All Rights Reserved.
 */
public class NumberValidate extends AbstractColumnDataValidate implements ColumnDataValidate {

    @Override
    protected void checked(ColumnValidateDto columnValidateDto) {
        if (!NumberUtils.isParsable(columnValidateDto.getValue())) {
            throw new DataCheckException(ColumnExceptionResponse.DATA_FORMAT_FAILD,columnValidateDto.getColumnLabel());
        }
        Double value = NumberUtils.toDouble(columnValidateDto.getValue());
        if (columnValidateDto.getMinValue() != null && value < columnValidateDto.getMinValue()) {
            throw new DataCheckException(ColumnExceptionResponse.VALUE_NOT_RANGE.getCode(),String.format("最小值不能小于%d",columnValidateDto.getMinValue()));
        }
        if (columnValidateDto.getMaxValue() != null && value > columnValidateDto.getMaxValue()) {
            throw new DataCheckException(ColumnExceptionResponse.VALUE_NOT_RANGE.getCode(),String.format("最大值不能大于%d",columnValidateDto.getMinValue()));
        }
        columnValidateDto.setRealValue(value);
    }
}
